package com.imooc.mall.common;


import com.imooc.mall.exception.ImoocMallExceptionEnum;

// 声明这个是可以存放泛型的类
public class ApiRestResponse<T> {

    private String msg;

    private Integer status;

    private T data;

    // 表示为静态类属性不能被修改的
    private static final int OK_CODE = 10000;

    private static final String OK_MSG = "success";

    public ApiRestResponse(String msg, Integer status, T data) {
        this.msg = msg;
        this.status = status;
        this.data = data;
    }

    // 通过枚举类把错误的信息都放在这个类上面去然后返回出去结果。
    public ApiRestResponse(Integer status,String msg) {
        this.msg = msg;
        this.status = status;
    }
    // 无参数构造函数 没有返回给前端的代码，默认是成功的，调用成功的信息
    public ApiRestResponse() {
        this(OK_CODE,OK_MSG); //调用有参数函数的方法 this(参数值)
    }

    // 返回通用的响应对象 <T> 声明这个方法为或者持有一个泛型的方法 返回的对象为这个static的泛型对象
    public static  <T>  ApiRestResponse<T> success(){
        return new ApiRestResponse<>();
    }

    //返回一个有数据的对象 表示该方法返回的是一个泛型的类
    public static <T> ApiRestResponse<T> success(T result){
        ApiRestResponse<T> response = new ApiRestResponse<>();
        response.setData(result);
        return response;
    }

    // 对调用两个参数的构造实行赋值操作
    public static <T> ApiRestResponse<T> error(Integer code, String msg){
        // 调用参数构造的方法
        return new ApiRestResponse<>(code,msg);
    }

    // 对外界暴露一个枚举接口的类 让外界可以调用
    public static <T> ApiRestResponse<T> error(ImoocMallExceptionEnum ex){
        // 对内部调用两个参数的构造方法
        return new ApiRestResponse<>(ex.getCode(),ex.getMsg());
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public static int getOkCode() {
        return OK_CODE;
    }

    public static String getOkMsg() {
        return OK_MSG;
    }
}